热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

年龄词prob|em在prolog中

如何解决《年龄词prob|em在prolog中》经验,为你挑选了1个好方法。

我知道:
Nick = 2*Kate
(Kate + Lea)= 2*Nick
(Chris + Nick)= 2*(Kate + Lea)
Ashley = 24
Ashley + Kate + Lea = 2*(Chris + Nick)

取消一些后,我发现:
Ashley = 12*Kate => Kate = 2
Lea = 3*Kate => Lea = 6
Nick = 2*Kate => Nick = 4
Chris = 6*Kate => Chris = 12

我试过这个:

:- use_module(library(clpfd)).

ages(As) :-
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   12 * Kate #= Ashley,
   Lea #= 3*Kate,
   Nick #= 2*Kate,
   Chris #= 6*Kate.

输出:

Ashley = 24,
Chris = 12,
Kate = 2,
Lea = 6,
Nick = 4

上面的解决方案工作正常,但老师告诉我,我不能使用取消.我有点困惑,因为没有取消它不起作用.

:- use_module(library(clpfd)).

ages(As) :-
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   Lea + Kate #= 2 * Nick,
   Chris + Nick #= 2 * (Kate + Lea),
   Nick #= 2 * Kate,
   Ashley + Kate + Lea #= 2*(Nick + Chris).

输出:

Ashley = 24,
Lea+Kate+24#=2*Nick+2*Chris,
Chris+Nick#=2*Lea+2*Kate,
Lea+Kate#=2*Nick,
2*Kate#=Nick

有任何想法吗?



1> tas..:

如果age/1按原样调用,则会得到剩余目标(有关详细信息,请参阅CLP(FD)文档)作为答案:

?- ages(As).
As = [24, _G1642, _G1645, _G1648, _G1651],
_G1642+ -2*_G1645+ -2*_G1648+_G1651#= -24,
-2*_G1642+_G1645+_G1648+ -2*_G1651#=0,
_G1642+ -2*_G1645+_G1651#=0,
2*_G1651#=_G1645.

为了获得实际数字,您必须限制数字的范围并随后标记.由于已知没有人达到200年,因此0至200的年龄限制似乎是合理的.然后您的查询提供实际数字作为答案:

?- ages(As), As ins 0..200, label(As).
As = [24, 6, 4, 12, 2].

这解决了您的直接问题.但是,我想补充两点.首先,它产生更清晰可读的代码,以将域限制和标记部分与描述实际关系的谓词分开.其次,它有助于结果的可读性在列表中具有成对的名称年龄.为了说明这些要点,我们定义一个谓词ages2/1来调用核心关系ages2_/2,然后限制和标记年龄.核心关系将年龄与名称分开,并在第二个列表中提供所述年龄,毕竟这些是您要标记的变量.这允许您在调用谓词的单个列表中具有任意复杂的术语ages2/1.随后您可以像在中一样发布约束ages/1.将这些想法放在一起可能看起来像这样:

ages2(NAs) :-
   ages2_(NAs,As),
   As ins 0..200,
   label(As).

ages2_(NAs,As) :-
   NAs = [ashley-Ashley, lea-Lea, nick-Nick, chris-Chris, kate-Kate],
   As = [Ashley, Lea, Nick, Chris, Kate],
   Ashley #= 24,
   Lea + Kate #= 2 * Nick,
   Chris + Nick #= 2 * (Kate + Lea),
   Nick #= 2 * Kate,
   Ashley + Kate + Lea #= 2*(Nick + Chris).

?- ages2(As).
As = [ashley-24, lea-6, nick-4, chris-12, kate-2].


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 先看看ElementUI里关于el-table的template数据结构:<template><el-table:datatableData><e ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 如何在elementui table 内容里面放多选框?
    本文介绍了如何在elementui的table组件中放置多选框的方法,并提供了相应的代码示例和UI图效果。通过阅读本文,你将了解如何将UI图中的多选框放到表格内容中,并实现相应的功能。 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • LINUX学习之centos7营救模式
    今天卸载软件的时候,不小心把GNOME的一些组件给卸了,导致桌面无法正常开启,会卡在启动过程中,而我的开机启动模式又是设置为图形界面,所以一开LINUX就卡住了,进入不了命令行界面 ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
  • vb.net不用多线程如何同时运行两个过程?不用多线程?即使用多线程,也不会是“同时”执行,题主只要略懂一些计算机编译原理就能明白了。不用多线程更不可能让两个过程同步执行了。不过可 ... [详细]
author-avatar
笑如夏风_503
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有